package com.gzc.just.play.last.war.common.router;

import com.gzc.just.play.last.war.common.message.MessageHandler;
import io.netty.channel.ChannelHandlerContext;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.Map;

/**
 * 简单消息路由器
 */
@Component
public class SimpleMessageRouter {
    private final Map<Integer, MessageHandler<?>> handlers = new HashMap<>();
    
    /**
     * 注册消息处理器
     * @param handler 消息处理器
     */
    public void registerHandler(MessageHandler<?> handler) {
        handlers.put(handler.getMessageId(), handler);
    }
    
    /**
     * 路由消息
     * @param messageId 消息ID
     * @param message 消息对象
     * @param ctx 通道上下文
     */
    @SuppressWarnings("unchecked")
    public <T> void routeMessage(int messageId, T message, ChannelHandlerContext ctx) {
        MessageHandler<T> handler = (MessageHandler<T>) handlers.get(messageId);
        if (handler != null) {
            handler.handle(message, ctx);
        } else {
            throw new RuntimeException("No handler found for message ID: " + messageId);
        }
    }
}